<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico"/>
<title>DynamoRIO API: DynamoRIO eXtension utilities</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">DynamoRIO API
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__drx.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">DynamoRIO eXtension utilities</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga1f9aebf1de3ebbf4283a4dcf73308562"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br/>
&#160;&#160;<a class="el" href="group__drx.html#gga1f9aebf1de3ebbf4283a4dcf73308562a507636af18a8858c214066682d013a1a">DRX_COUNTER_64BIT</a> =  0x01, 
<br/>
&#160;&#160;<a class="el" href="group__drx.html#gga1f9aebf1de3ebbf4283a4dcf73308562aa45e32a1d62398b84858de6759364688">DRX_COUNTER_LOCK</a> =  0x10
<br/>
 }</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gae0665a86427616ffc80c59375649e283"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#gae0665a86427616ffc80c59375649e283">drx_init</a> (void)</td></tr>
<tr class="memitem:ga996c662c089046984b64a627500748f5"><td class="memItemLeft" align="right" valign="top">DR_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#ga996c662c089046984b64a627500748f5">drx_exit</a> (void)</td></tr>
<tr class="memitem:ga3189cbfbf85d5c32965bd8a140b2c35e"><td class="memItemLeft" align="right" valign="top">DR_EXPORT ptr_uint_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#ga3189cbfbf85d5c32965bd8a140b2c35e">drx_reserve_note_range</a> (size_t size)</td></tr>
<tr class="memitem:gae33a91872caa46e430d5d721af6d8c82"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#gae33a91872caa46e430d5d721af6d8c82">drx_aflags_are_dead</a> (<a class="el" href="structinstr__t.html">instr_t</a> *where)</td></tr>
<tr class="memitem:gad92376389835d11ed759deb59d8888f6"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#gad92376389835d11ed759deb59d8888f6">drx_insert_counter_update</a> (void *drcontext, instrlist_t *ilist, <a class="el" href="structinstr__t.html">instr_t</a> *where, <a class="el" href="dr__ir__utils_8h.html#a89a6b714ff24d91d78589877047a29b9">dr_spill_slot_t</a> slot, void *addr, int value, uint flags)</td></tr>
<tr class="memitem:ga9348e840424caf0098a8b1ba69955864"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#ga9348e840424caf0098a8b1ba69955864">drx_register_soft_kills</a> (bool(*event_cb)(process_id_t pid, int exit_code))</td></tr>
<tr class="memitem:gaa0a5fcca247de11374c3555a5326cba8"><td class="memItemLeft" align="right" valign="top">DR_EXPORT file_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#gaa0a5fcca247de11374c3555a5326cba8">drx_open_unique_file</a> (const char *dir, const char *prefix, const char *suffix, uint extra_flags, char *result OUT, size_t result_len)</td></tr>
<tr class="memitem:gaa85537dd6726928bbd43a21dc8211a53"><td class="memItemLeft" align="right" valign="top">DR_EXPORT file_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drx.html#gaa85537dd6726928bbd43a21dc8211a53">drx_open_unique_appid_file</a> (const char *dir, ptr_int_t id, const char *prefix, const char *suffix, uint extra_flags, char *result OUT, size_t result_len)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="ga1f9aebf1de3ebbf4283a4dcf73308562"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">anonymous enum</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Flags for <code>drx_insert_counter_update</code> </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga1f9aebf1de3ebbf4283a4dcf73308562a507636af18a8858c214066682d013a1a"></a>DRX_COUNTER_64BIT</em>&nbsp;</td><td>
<p>64-bit counter is used for update. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga1f9aebf1de3ebbf4283a4dcf73308562aa45e32a1d62398b84858de6759364688"></a>DRX_COUNTER_LOCK</em>&nbsp;</td><td>
<p>Counter update is atomic. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gae33a91872caa46e430d5d721af6d8c82"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool drx_aflags_are_dead </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structinstr__t.html">instr_t</a> *&#160;</td>
          <td class="paramname"><em>where</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Analyze if arithmetic flags are dead after (including) instruction <code>where</code>.</p>
<dl class="section note"><dt>Note:</dt><dd>May be called without calling <a class="el" href="group__drx.html#gae0665a86427616ffc80c59375649e283">drx_init()</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga996c662c089046984b64a627500748f5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT void drx_exit </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Cleans up the drx extension. </p>

</div>
</div>
<a class="anchor" id="gae0665a86427616ffc80c59375649e283"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool drx_init </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Initializes the drx extension. Must be called prior to any drx routine that does not explicitly state otherwise. Can be called multiple times (by separate components, normally) but each call must be paired with a corresponding call to <a class="el" href="group__drx.html#ga996c662c089046984b64a627500748f5">drx_exit()</a>.</p>
<dl class="section return"><dt>Returns:</dt><dd>whether successful. </dd></dl>

</div>
</div>
<a class="anchor" id="gad92376389835d11ed759deb59d8888f6"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool drx_insert_counter_update </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>drcontext</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">instrlist_t *&#160;</td>
          <td class="paramname"><em>ilist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structinstr__t.html">instr_t</a> *&#160;</td>
          <td class="paramname"><em>where</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__ir__utils_8h.html#a89a6b714ff24d91d78589877047a29b9">dr_spill_slot_t</a>&#160;</td>
          <td class="paramname"><em>slot</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>value</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Inserts into <code>ilist</code> prior to <code>where</code> meta-instruction(s) to add the constant <code>value</code> to the counter located at <code>addr</code>. Different DRX_COUNTER_* options can be specified by <code>flags</code>. The spill slot <code>slot</code> is used for storing arithmetic flags if necessary.</p>
<dl class="section return"><dt>Returns:</dt><dd>whether successful.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>The counter update is racy (i.e., not synchronized among threads) unless <a class="el" href="group__drx.html#gga1f9aebf1de3ebbf4283a4dcf73308562aa45e32a1d62398b84858de6759364688">DRX_COUNTER_LOCK</a> is specified in <code>flags</code>. When <a class="el" href="group__drx.html#gga1f9aebf1de3ebbf4283a4dcf73308562aa45e32a1d62398b84858de6759364688">DRX_COUNTER_LOCK</a> is set, the instrumentation may fail if a 64-bit counter is updated in a 32-bit application or the counter crosses cache lines.</dd>
<dd>
To update multiple counters at the same place, multiple <a class="el" href="group__drx.html#gad92376389835d11ed759deb59d8888f6">drx_insert_counter_update()</a> invocations should be made in a row with the same <code>where</code> instruction and no other instructions should be inserted in between. In that case, <code>drx</code> will try to merge the instrumentation for better performance.</dd>
<dd>
May be called without calling <a class="el" href="group__drx.html#gae0665a86427616ffc80c59375649e283">drx_init()</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaa85537dd6726928bbd43a21dc8211a53"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT file_t drx_open_unique_appid_file </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ptr_int_t&#160;</td>
          <td class="paramname"><em>id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>prefix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>suffix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>extra_flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *result&#160;</td>
          <td class="paramname"><em>OUT</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>result_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Opens a new file with a name constructed from "dir/prefix.appname.id.xxxx.suffix", where xxxx is a 4-digit number incremented until a unique name is found that does not collide with any existing file. The appname string comes from <a class="el" href="dr__tools_8h.html#aace5e8084f523fd25871b31463c7ecda">dr_get_application_name()</a>. The id portion of the string is from <code>id</code>, which is meant to be either the process id or the thread id.</p>
<p>Passes <code>extra_flags</code> through to the <a class="el" href="dr__tools_8h.html#ae3ae2190774a204af207602791a32cb6">dr_open_file()</a> call.</p>
<p>On success, returns the file handle and optionally the resulting path in <code>result</code>. On failure, returns INVALID_FILE.</p>
<dl class="section note"><dt>Note:</dt><dd>May be called without calling <a class="el" href="group__drx.html#gae0665a86427616ffc80c59375649e283">drx_init()</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="gaa0a5fcca247de11374c3555a5326cba8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT file_t drx_open_unique_file </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>prefix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>suffix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>extra_flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *result&#160;</td>
          <td class="paramname"><em>OUT</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>result_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Opens a new file with a name constructed from "dir/prefix.xxxx.suffix", where xxxx is a 4-digit number incremented until a unique name is found that does not collide with any existing file.</p>
<p>Passes <code>extra_flags</code> through to the <a class="el" href="dr__tools_8h.html#ae3ae2190774a204af207602791a32cb6">dr_open_file()</a> call.</p>
<p>On success, returns the file handle and optionally the resulting path in <code>result</code>. On failure, returns INVALID_FILE.</p>
<dl class="section note"><dt>Note:</dt><dd>May be called without calling <a class="el" href="group__drx.html#gae0665a86427616ffc80c59375649e283">drx_init()</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="ga9348e840424caf0098a8b1ba69955864"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool drx_register_soft_kills </td>
          <td>(</td>
          <td class="paramtype">bool(*)(process_id_t pid, int exit_code)&#160;</td>
          <td class="paramname"><em>event_cb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Registers for the "soft kills" event, which helps to execute process exit events when a process is terminated by another process.</p>
<p>The callback's return value indicates whether to skip the termination action by the application: i.e., true indicates to skip it (the usual case) and false indicates to continue with the application action. In some cases, individually continuing requires emulation when the original application action involved multiple processes.</p>
<p>When there are multiple registered callbacks, if any callback returns true, the application action is skipped.</p>
<p>In normal usage, upon receiving this callback the client will send a nudge (see <a class="el" href="dr__events_8h.html#aa719c9575ca2329c03ab60ef41ba14c6">dr_nudge_client_ex()</a>) to the targeted process. The nudge handler then performs any shutdown actions, such as instrumentation result output. The handler then terminates the target process from within, allowing the callback in the targeting process to skip the termination action. Passing the exit code to the nudge handler is recommended to preserve the intended application exit code.</p>
<p>The nudge handler should support being invoked multiple times (typically by having only the first one take effect) as in some cases a parent process will terminate child processes in multiple ways.</p>
<p>This event must be registered for during process initialization, in order to properly track per-thread information. Un-registering is not supported: soft kills cannot be in effect for only part of the process lifetime.</p>
<p>Soft kills can be risky. If the targeted process is not under DynamoRIO control, the nudge might terminate it, but in a different manner than would have occurred. If the nudge fails for some reason but the targeter's termination is still skipped, the child process might be left alive, causing the application to behave incorrectly.</p>
<p>The implementation of this event uses drmgr's CLS (<a class="el" href="group__drmgr.html#ga933ff32be874004447af771283d0bcee">drmgr_register_cls_field()</a>), which conflicts with <a class="el" href="dr__tools_8h.html#a787aff5df1ded3de8a7ce9f3efef0594">dr_get_tls_field()</a>. A client using this event must use <a class="el" href="group__drmgr.html#ga512b4290d94b1874537e5b604cb27cab">drmgr_register_tls_field()</a> instead of <a class="el" href="dr__tools_8h.html#a787aff5df1ded3de8a7ce9f3efef0594">dr_get_tls_field()</a>.</p>
<dl class="section return"><dt>Returns:</dt><dd>whether successful. </dd></dl>

</div>
</div>
<a class="anchor" id="ga3189cbfbf85d5c32965bd8a140b2c35e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT ptr_uint_t drx_reserve_note_range </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Reserves <code>size</code> values in the namespace for use in the <code>note</code> field of instructions. The reserved range starts at the return value and is contiguous. Returns DRX_NOTE_NONE on failure. Un-reserving is not supported. </p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer" style="float:none;text-align:center"><img border=0 src="favicon.png"> &nbsp;  DynamoRIO API version 5.0.0 --- Wed Sep 10 2014 21:36:44 &nbsp; <img border=0 src="favicon.png">
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>
